home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / packet / p_aa4re / bb212src / bblogi.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-03-12  |  6.2 KB  |  213 lines

  1. (*===========================================================================*)
  2. (* Procedure for log open/close                                              *)
  3. (*                                                                           *)
  4. (*   Copyright 1988, 1989, 1990, 1992  by H. Roy Engehausen.  All rights     *)
  5. (*   reserved.                                                               *)
  6. (*                                                                           *)
  7. (*===========================================================================*)
  8.  
  9. {$UNDEF LOG_DEBUG}
  10.  
  11. (*===========================================================================*)
  12. (* Generate log name                                                         *)
  13. (*===========================================================================*)
  14.  
  15. FUNCTION generate_log_name : PATHSTR;
  16.  
  17.   VAR
  18.     log_ext    : EXTSTR;
  19.     log_file   : NAMESTR;
  20.     log_path   : DIRSTR;
  21.     work       : LONGINT;
  22.  
  23.   BEGIN;
  24.  
  25.     FSPLIT(opt_block.log_fn, log_path, log_file, log_ext);
  26.  
  27.     CASE log_type OF
  28.       'M':
  29.          log_file := COPY(todays_date_time, 1, 4);
  30.       'D':
  31.          log_file := COPY(todays_date_time, 1, 6);
  32.       'W':
  33.          BEGIN;
  34.            work     := current_day_time - todays_dow * LONGINT(ticks_per_day);
  35.            log_file := COPY(time_str(work, TRUE), 1, 6);
  36.          END;
  37.     END;
  38.  
  39.     generate_log_name := log_path + 'BB' + log_file + '.LOG';
  40.  
  41.   END;
  42.  
  43. (*===========================================================================*)
  44. (* Initialize log                                                            *)
  45. (*===========================================================================*)
  46.  
  47. PROCEDURE log_init;
  48.  
  49.   VAR
  50.     i          : BYTE;
  51.     fn         : PATHSTR;
  52.     log_ext    : EXTSTR;
  53.     log_fname  : NAMESTR;
  54.     log_path   : DIRSTR;
  55.  
  56.   BEGIN;
  57.  
  58.     IF opt_block.log_fn = 'NONE' THEN
  59.       BEGIN;
  60.         log_time := max_time;
  61.         log_type := 'N';
  62.         EXIT;
  63.       END;
  64.  
  65.     log_time := up_time_from_now(log_interval * 60);
  66.  
  67.     log_dow  := todays_dow;
  68.  
  69.     FSPLIT(opt_block.log_fn, log_path, log_fname, log_ext);
  70.  
  71.     IF (log_ext <> '')
  72.           OR ((log_fname <> 'WEEKLY')
  73.                     AND (log_fname <> 'MONTHLY')
  74.                     AND (log_fname <> 'DAILY')) THEN
  75.       BEGIN;
  76.         log_type := ' ';
  77.         fn := opt_block.log_fn;
  78.       END
  79.     ELSE
  80.       BEGIN;
  81.         log_type := log_fname[1];
  82.         fn := generate_log_name;
  83.       END;
  84.  
  85.     ASSIGN(log_file, fn);
  86.     {$I-}
  87.     APPEND(log_file);
  88.     {$I+}
  89.     i := IORESULT;
  90.     IF i <> 0 THEN
  91.       BEGIN;
  92.         {$I-}
  93.         REWRITE(log_file);
  94.         {$I+}
  95.         i := IORESULT;
  96.       END;
  97.  
  98.     IF i <> 0 THEN
  99.       BEGIN;
  100.         WRITELN('Error ', i, ' opening log file -- ', fn);
  101.         HALT;
  102.       END;
  103.  
  104.     WRITELN(log_file, todays_date_time, ' BEGIN');
  105.  
  106.  
  107.   END;
  108.  
  109. (*===========================================================================*)
  110. (* Close log                                                                 *)
  111. (*===========================================================================*)
  112.  
  113. PROCEDURE log_close;
  114.  
  115.   BEGIN;
  116.  
  117.     WRITELN(log_file, todays_date_time, ' END');
  118.     CLOSE(log_file);
  119.  
  120.   END;
  121.  
  122. (*===========================================================================*)
  123. (* Sync log                                                                  *)
  124. (*===========================================================================*)
  125.  
  126. PROCEDURE log_sync;
  127.  
  128.   VAR
  129.     fn       : PATHSTR;
  130.     i        : INTEGER;
  131.     new_file : BOOLEAN;
  132.  
  133.   BEGIN;
  134.  
  135.     {$IFDEF LOG_DEBUG}
  136.       WRITELN('Log Sync');
  137.       WRITELN('LOGDOW = ', log_dow);
  138.       WRITELN('TODDOW = ', todays_dow);
  139.     {$ENDIF}
  140.  
  141.     (*-----------------------------------------------------------------------*)
  142.     (* Obtain the interrupt lock                                             *)
  143.     (*-----------------------------------------------------------------------*)
  144.  
  145.     get_semaphore(semaphore_interrupts, sem_exclusive, FALSE);
  146.  
  147.     (*-----------------------------------------------------------------------*)
  148.     (* Close the log to force an update                                      *)
  149.     (*-----------------------------------------------------------------------*)
  150.  
  151.     CLOSE(log_file);
  152.  
  153.     (*-----------------------------------------------------------------------*)
  154.     (* Change name if needed                                                 *)
  155.     (*-----------------------------------------------------------------------*)
  156.  
  157.     new_file := (log_dow <> todays_dow) AND (log_type <> ' ');
  158.  
  159.     (*-----------------------------------------------------------------------*)
  160.     (* Change name if needed                                                 *)
  161.     (*-----------------------------------------------------------------------*)
  162.  
  163.     fn := '';
  164.  
  165.     IF (log_dow <> todays_dow) AND (log_type <> ' ') THEN
  166.       BEGIN;
  167.  
  168.         fn := generate_log_name;
  169.  
  170.         ASSIGN(log_file, fn);
  171.  
  172.         log_dow := todays_dow;
  173.  
  174.         {$IFDEF LOG_DEBUG}
  175.           WRITELN('New log name -- ', generate_log_name);
  176.           WRITELN('LOGDOW = ', log_dow);
  177.           WRITELN('TODDOW = ', todays_dow);
  178.         {$ENDIF}
  179.  
  180.       END;
  181.  
  182.     (*-----------------------------------------------------------------------*)
  183.     (* Reopen the log                                                        *)
  184.     (*-----------------------------------------------------------------------*)
  185.  
  186.     {$I-}
  187.     APPEND(log_file);
  188.     {$I+}
  189.     i := IORESULT;
  190.     IF new_file AND (i <> 0) THEN
  191.       BEGIN;
  192.         {$I-}
  193.         REWRITE(log_file);
  194.         {$I+}
  195.         i := IORESULT;
  196.       END;
  197.  
  198.     IF i <> 0 THEN
  199.       BEGIN;
  200.         WRITELN('Error ', i, ' syncing log file -- ', fn);
  201.         HALT;
  202.       END;
  203.  
  204.     (*-----------------------------------------------------------------------*)
  205.     (* Release the interrupt lock                                            *)
  206.     (*-----------------------------------------------------------------------*)
  207.  
  208.     free_semaphore(semaphore_interrupts);
  209.  
  210.     log_time := up_time_from_now(log_interval * 60);
  211.  
  212.   END;
  213.